import axios from 'axios'
import { message } from 'ant-design-vue'
import router from '@/router'

const BASE_PATH = import.meta.env.BASE_URL
// 区分开发和生产环境
const DEV_BASE_URL = 'http://localhost:8123'
const PROD_BASE_URL = 'http://1.15.35.112/'
const myAxios = axios.create({
  baseURL: PROD_BASE_URL,
  timeout: 60000,
  withCredentials: true,
})

// 添加请求拦截器
myAxios.interceptors.request.use(
  function (config) {
    // 在发送请求之前做些什么
    return config
  },
  function (error) {
    // 对请求错误做些什么
    return Promise.reject(error)
  },
)

// 全局响应拦截器
myAxios.interceptors.response.use(
  function (response) {
    const { data } = response
    // 未登录
    if (data.code === 40100) {
      // 动态获取当前完整路径
      const currentPath = window.location.pathname + window.location.search;

      // 排除登录相关请求（根据实际接口路径调整）
      const isLoginRequest = response.config.url?.includes('/user/get/login');
      // 检查是否已在登录页（适配子路径）
      const isLoginPage = currentPath.startsWith(`${BASE_PATH}/user/login`);
      // 不是获取用户信息的请求，并且用户目前不是已经在用户登录页面，则跳转到登录页面
      if (!isLoginRequest && !isLoginPage) {
        message.warning('请先登录');
        // 构建适配子路径的登录页地址
        const redirectUrl = encodeURIComponent(currentPath);
        const loginUrl = `${BASE_PATH}/user/login?redirect=${redirectUrl}`;

        // 优先使用 Vue Router 跳转（保持 SPA 特性）
        if (router) {
          router.push({
            path: '/user/login',
            query: { redirect: currentPath }
          });
        } else {
          window.location.href = loginUrl;
        }
      }
    }
    return response
  },
  function (error) {
    // 统一处理 HTTP 错误（如 500、404）
    if (error.response?.status === 500) {
      message.error('服务器内部错误');
    }
    return Promise.reject(error)
  },
);

export default myAxios;
